<!DOCTYPE html>

<html lang="zh-CN">

<head>
    
    <title>Mysql自学笔记 - 塔纳托斯</title>
    <meta charset="UTF-8">
    <meta name="keywords" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
    
    

    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
    <meta name="description" content="数据库的基本操作在cmd(以管理员身份运行)中: 开启服务 net start mysql57 停止服务 net stop mysql57 #mysql57是下载mysql时的默认服务名  显示数据库 show databases;  创建数据库 create database if not exists school;  创建数据库并设置字符编码为gbk(utf8) create databas">
<meta property="og:type" content="article">
<meta property="og:title" content="Mysql自学笔记">
<meta property="og:url" content="http://hai-chao.gitee.io/blog/2021/03/08/9.mysql-zi-xue-bi-ji/index.html">
<meta property="og:site_name" content="塔纳托斯">
<meta property="og:description" content="数据库的基本操作在cmd(以管理员身份运行)中: 开启服务 net start mysql57 停止服务 net stop mysql57 #mysql57是下载mysql时的默认服务名  显示数据库 show databases;  创建数据库 create database if not exists school;  创建数据库并设置字符编码为gbk(utf8) create databas">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://img.maocdn.cn/img/2021/02/05/1.png">
<meta property="og:image" content="https://img.maocdn.cn/img/2021/02/05/2.png">
<meta property="og:image" content="https://img.maocdn.cn/img/2021/02/05/3.png">
<meta property="article:published_time" content="2021-03-08T14:45:02.000Z">
<meta property="article:modified_time" content="2021-03-15T13:57:17.484Z">
<meta property="article:author" content="塔纳托斯">
<meta property="article:tag" content="学习">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://img.maocdn.cn/img/2021/02/05/1.png">
    <link rel="stylesheet" href="/blog/lib/jquery.fancybox.min.css?v=1679297521157">
    
    <link rel="stylesheet" href="/blog/lib/mdui_043tiny/css/mdui.css?v=1679297521157">
    <link rel="stylesheet" href="/blog/lib/iconfont/iconfont.css?v=1679297521157">
    <link rel="stylesheet" href="/blog/css/style.css?v=1679297521157">
     
    
<meta name="generator" content="Hexo 5.3.0"><link rel="alternate" href="/blog/atom.xml" title="塔纳托斯" type="application/atom+xml">
<link rel="stylesheet" href="/blog/css/prism-tomorrow.css" type="text/css"></head>

<body class="mdui-drawer-body-left">
    
    <div id="nexmoe-background">
        <div class="nexmoe-bg" style="background-image: url(https://cdn.jsdelivr.net/gh/nexmoe/nexmoe.github.io@latest/images/cover/5c3aec85a4343.jpg)"></div>
        <div class="mdui-appbar mdui-shadow-0">
            <div class="mdui-toolbar">
                <a mdui-drawer="{target: '#drawer', swipe: true}" title="menu" class="mdui-btn mdui-btn-icon mdui-ripple"><i class="mdui-icon nexmoefont icon-menu"></i></a>
                <div class="mdui-toolbar-spacer"></div>
                <!--<a href="javascript:;" class="mdui-btn mdui-btn-icon"><i class="mdui-icon material-icons">search</i></a>-->
                <a href="/blog/" title="塔纳托斯" class="mdui-btn mdui-btn-icon"><img src="https://s6.jpg.cm/2022/01/17/LFpniO.md.jpg" alt="塔纳托斯"></a>
            </div>
        </div>
    </div>
    <div id="nexmoe-header">
        <div class="nexmoe-drawer mdui-drawer" id="drawer">
    <div class="nexmoe-avatar mdui-ripple">
        <a href="/blog/" title="塔纳托斯">
            <img src="https://s6.jpg.cm/2022/01/17/LFpniO.md.jpg" alt="塔纳托斯" alt="塔纳托斯">
        </a>
    </div>
    <div class="nexmoe-count">
        <div><span>文章</span>29</div>
        <div><span>标签</span>6</div>
        <div><span>分类</span>0</div>
    </div>
    <div class="nexmoe-list mdui-list" mdui-collapse="{accordion: true}">
        
        <a class="nexmoe-list-item mdui-list-item mdui-ripple false" href="/blog/" title="文章归档">
            <i class="mdui-list-item-icon nexmoefont icon-container"></i>
            <div class="mdui-list-item-content">
                文章归档
            </div>
        </a>
        
    </div>
    <aside id="nexmoe-sidebar">
    
    
  <div class="nexmoe-widget-wrap">
    <div id="randomtagcloud" class="nexmoe-widget tagcloud nexmoe-rainbow">
      <a href="/blog/tags/java/" style="font-size: 10px;">java</a> <a href="/blog/tags/%E5%88%86%E4%BA%AB/" style="font-size: 20px;">分享</a> <a href="/blog/tags/%E5%90%83%E7%93%9C/" style="font-size: 10px;">吃瓜</a> <a href="/blog/tags/%E5%AD%A6%E4%B9%A0/" style="font-size: 16.67px;">学习</a> <a href="/blog/tags/%E6%80%BB%E7%BB%93/" style="font-size: 13.33px;">总结</a> <a href="/blog/tags/%E6%B8%B8%E5%90%8E%E6%84%9F/" style="font-size: 10px;">游后感</a>
    </div>
    
  </div>

    
</aside>
    <div class="nexmoe-copyright">
        &copy; 2023 塔纳托斯
        Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
        & <a href="https://github.com/theme-nexmoe/hexo-theme-nexmoe" target="_blank">Nexmoe</a>
        
    </div>
</div><!-- .nexmoe-drawer -->
    </div>
    <div id="nexmoe-content">
        <div class="nexmoe-primary">
            <div class="nexmoe-post">

  <article>
      
          <div class="nexmoe-post-cover"> 
              
              <h1>Mysql自学笔记</h1>
          </div>
      
      
      <div class="nexmoe-post-meta nexmoe-rainbow" style="margin:10px 0!important;">
    <a><i class="nexmoefont icon-calendar-fill"></i>2021年03月08日</a>
</div>

      

      <h2 id="数据库的基本操作"><a href="#数据库的基本操作" class="headerlink" title="数据库的基本操作"></a>数据库的基本操作</h2><pre class=" language-mysql"><code class="language-mysql">在cmd(以管理员身份运行)中:
开启服务
net start mysql57
停止服务
net stop mysql57
#mysql57是下载mysql时的默认服务名

显示数据库
show databases;

创建数据库
create database if not exists school;

创建数据库并设置字符编码为gbk(utf8)
create database if not exists school charset=gbk;

删除数据库
drop database if exists school;

查看创建的数据库
show create database school;

修改数据库 设置字符编码为utf8
alter database school charset=utf8;

使用school数据库
use school;</code></pre>
<h2 id="表的基本操作"><a href="#表的基本操作" class="headerlink" title="表的基本操作"></a>表的基本操作</h2><pre class=" language-mysql"><code class="language-mysql">显示表
show tables;

最为简单的创建表
create table if not exists student(
    id int,
    name varchar(30),
    age int
);
标准的创建
create table if not exists student(
    id int(4) auto_increment primary key comment 'id',
    name varchar(30) not null comment '名字',
    address varchar(30) default '未知' comment '地址',
    age int(3)
)engine=innodb;
# auto_increment 自动增长
# primary key    主键
# comment ''     内注释
# not null       填写时非空
# default ''     设置默认值
# engine=innodb  引擎(后面内容)

查看表的结构
desc student;

删除表
drop table if exists student;

删除多张表,用逗号隔开
drop table if exists stu,ooo,jjj;

修改表，增加一个字段
alter table student add phone varchar(10);

修改表，在id后面加入一个字段
alter table student add sex varchar(2) after id;

修改表，加一个字段在开头
alter table student add gender varchar(2) first;

修改表，删除字段
alter table student drop gender;

修改表，修改表中的字段
alter table student change sex gender varchar(4);

修改表，只修改表中字段的类型
alter table student modify phone varchar(1);

修改表，把表重命名
alter table student rename to person;</code></pre>
<h2 id="数据操作"><a href="#数据操作" class="headerlink" title="数据操作"></a>数据操作</h2><pre class=" language-mysql"><code class="language-mysql">插入数据
insert into teacher(id,name,phone,address) values(1,'Frank','1888888','上海');
insert into teacher values(2,'Tom','000000','北京');   
#teacher这个表后面的括号可以省略不写，省略后必须按照表的顺序来填写数据
insert into teacher values(null,'jerry',null,null);
#id字段为自动增长，写入 null时就会自动增长//name字段设置为 not null，因此性质决定不能为空
#address字段可以写 null和 default，写入 default后会按照默认值存入
insert into teacher(name,phone,address) values('haichao',null,null);
#对于插入数据还可以这样写 

插入多条数据
insert into teacher values(null,'tom',null,null),(null,'jerry',null,null);

删除数据
delete from teacher where id=9;
#删除 从 teacher表  在哪儿 -> id=9;
#删除要按照唯一确定的来删，如不能以name来删，如删除name='张三'的，这样会把name为张三的全部删除
delete from teachar where age>30;
#删除age>30的数据

清空表
delete from teacher;
#删除所有的数据，不推荐的写法
#delete是遍历方式，性能不好，并且key值及会接着自动增长（如删除数据后新插入数据的id会为id=10这种）
truncate table student;
#清空表，过程为将整个表干掉，再重新创建删除的表

更新数据
update teacher set name='frank' where id=1;
#更新 teacher表 在id=1的地方 重设置name为frank
#where后的语句注意唯一性
update teacher set name='frank',address='beijing' where id=1;
#当没有 where时，会将所有的数据都修改
update teacher set name='frank' where id=1 or id=2;
#多条件的写法

查数据（基本）
select id,phone,address from teacher;
#查id，phone，address这三个字段
select * from teacher;
#查所有字段从teacher这张表中
#不推荐使用，性能有缺陷

SQL语句区分
DDL(data definition language)数据库定义语言(针对数据库) create alter drop show
DML(data manipulation language)数据库操纵语言(针对数据) insert update delete select
DCL(data control language)数据控制语言(针对用户的)

字符编码问题
show variables like 'character_set_%';
#在win10下，要显示中文必须使 character_set_client和character_set_results的值为gbk
set character_set_client=gbk;
#修改的方式
#在实际开发中，character_set_%的值一定为utf8(遵循国际化),目前练习阶段可以为gbk。</code></pre>
<h2 id="数据类型"><a href="#数据类型" class="headerlink" title="数据类型"></a>数据类型</h2><p><strong>int 类型实际操作和注意事项</strong></p>
<pre class=" language-mysql"><code class="language-mysql">像人类年龄这种，就可以应用 tinyint unsigned
因为年龄是不可能为负数，所有采用 unsigned ,并且年龄值不会超过255，所以采用 tinyint

建表时 如: id int(4) auto_increment primary key comment 'id',
int(4) 表示id采用的是int类型，(4)表示的是宽度，在插入数据时超过这个宽度也是可以的，但不能超过int类型的范围。</code></pre>
<p><strong>浮点数</strong></p>
<pre class=" language-mysql"><code class="language-mysql">用法:
number_1 float(4,1)  (4,1)表示总长度有4位，小数位有1位。
number_2 double(4,2) (4,2)表示总长度有4位，小数位有2位。
在应用时:
insert into test values(1.9,1.99999999); 当小数位超过定义的小数位宽度时，会四舍五入。
有时也会发生精度丢失,如 values(1.9,1.111111)时，存入的值可能会变成1.10这种</code></pre>
<p><strong>定点数</strong></p>
<pre class=" language-mysql"><code class="language-mysql">用法:
money decimal(20,19) (20,19)表示总长度有20位，小数位有19位。
在 money 的存储中就可以用 decimal。
decimal 存储的小数不会发生精度丢失，原因在于 decimal 的整数部分和小数部分是分开存储的。
decimal 存储的小数当超过定义的宽度时同样会发生四舍五入。</code></pre>
<p><img src="https://img.maocdn.cn/img/2021/02/05/1.png"></p>
<p><strong>字符串和文本</strong></p>
<pre class=" language-mysql"><code class="language-mysql">char    定长字符串
varchar 变长字符串 常用的字符串，会回收没有用到的空间，效率没有 char 高。

text 常文本数据 如博客文章数据很多，就可以用这个。</code></pre>
<p><img src="https://img.maocdn.cn/img/2021/02/05/2.png"></p>
<p><strong>布尔</strong></p>
<pre class=" language-mysql"><code class="language-mysql">boolean 布尔类型
用法:
flag boolean,
insert into test values(false);  boolean 值有 false 和 true, true 保存为1, false 保存为0。</code></pre>
<p><strong>枚举</strong></p>
<pre class=" language-mysql"><code class="language-mysql">用法:
gender enum('man','woman','?','nothing')  对于这4个数据是以1，2，3，4进行管理的
insert into test values('man'),(1)        存入的两个数据都是字符串man
对于枚举里没有的数据写入会报错，如('www'),(5)这种

好处:
节省空间（存储的是数字，一个占2个字节），速度快，限制数据。</code></pre>
<p><strong>集合set</strong></p>
<pre class=" language-mysql"><code class="language-mysql">用法:
hobby set('哲学','数学','IT','NBA','动漫')
insert into test values('哲学,数学,IT,动漫')    注意 set和 enum的区别为选多个内容，并且是放在一起，用逗号分开
错误列子为: insert into test values('哲学','数学','动漫','IT')</code></pre>
<p><strong>时间日期类型</strong></p>
<pre class=" language-mysql"><code class="language-mysql">行业规定，每一张表都应该有一个时间日期类型，表示这个数据是什么时候插入，删除等等。
常用的时间日期类型为 datetime
用法:
createTime datetime 
insert into test values('2021-2-5 20:13:00')   这个一般都是由程序来建立准确的时间日期</code></pre>
<p><img src="https://img.maocdn.cn/img/2021/02/05/3.png"></p>
<h2 id="列属性完整性"><a href="#列属性完整性" class="headerlink" title="列属性完整性"></a>列属性完整性</h2><ul>
<li><strong>sql内注释和代码注释</strong></li>
</ul>
<p>单行注释</p>
<pre class=" language-mysql"><code class="language-mysql">-- 注释内容
#注释内容</code></pre>
<p>多行注释</p>
<pre class=" language-mysql"><code class="language-mysql">/*
注释内容
*/</code></pre>
<p>内注释</p>
<p>字段后面加 **comment ‘注释内容’**，好处：可以给操作人员一个好的提示。</p>
<ul>
<li><strong>数据库完整性（理论，自己学）</strong></li>
</ul>
<p>①保证字段完整，要有一个主键来唯一标识</p>
<p>②数据类型要正确，有些字段可以为空，有些不能为空，有些字段应有default</p>
<p>③可能需要对外部的引用</p>
<p>④自定义约束</p>
<ul>
<li><strong>default</strong></li>
</ul>
<p>设置默认值，一个例子：在高考时，有个学生没有来，此时插入数据（考试成绩）不能填为0或null，此时应填为default（设置为缺考）。</p>
<ul>
<li><strong>auto_increment</strong></li>
</ul>
<p>自增。填了auto_increment必须是primary key，而primary key不一定是auto_increment。</p>
<ul>
<li><strong>primary key</strong></li>
</ul>
<p>主键，绝对唯一，能够区分大众数据，而且是当中最重要的一块，且具有唯一性，且能够确认数据的唯一性，存在性，不可重复性，</p>
<p>且有可能与其他的表产生关系。简单来说，primary key唯一的，不可重复的，必须要有，能被其他表引用。在插入数据时，主键值不能为null，当设置了auto_increment后可以将主键值设为null。</p>
<p>选择主键：最少情况选一个字段为主键，尽可能选更新改动少的，如id，身份证号。用一个主键就可以了，两个不好维护，用数字来作为主键（字符串不好处理）。</p>
<p>设置主键的好处：①保证数据的完整性②加快查询某种数据的速度</p>
<p><strong>后期（建完表之后）添加主键与删除主键</strong></p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher add primary key (id);
alter table teacher drop primary key;</code></pre>
<ul>
<li><strong>组合键</strong></li>
</ul>
<p>一个表里不能有多个主键，但是能有多个字段组成的一个组合键，也可称为复合主键（依旧是一个主键）。</p>
<p>一个极端的使用案例：网站，id唯一，有些网站的昵称不可重复，可以这样使用组合键，但会出现问题——&gt;在查询时无法确定是以id还是name为准，及扩展性不好。</p>
<p><strong>设置组合键</strong></p>
<p>①在创建表时直接给</p>
<p>②后期添加</p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher add primary key (id,name);</code></pre>
<ul>
<li><strong>唯一键</strong></li>
</ul>
<p>唯一的，不可重复，且可以为null，与主键不同的是不能区分数据。在一个表中可以有多个唯一键，唯一键的作用：保证数据的不可重复性。在上述组合键的那个极端案例中就应使用唯一键。</p>
<p><strong>添加唯一键</strong></p>
<p>①在创建表时加入    使用<strong>unique</strong>关键字</p>
<p>②后期添加与删除</p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher add unique (name);
alter table teacher drop index name;</code></pre>
<p>③添加多个唯一键</p>
<p>创建表时在需要的字段后面写入关键字 <strong>unique</strong></p>
<p>后期添加</p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher add unique (name,phone);</code></pre>
<ul>
<li><strong>外键</strong></li>
</ul>
<p>当两个表中有公共字段时，字段名不一定相同，此时可以使用外键来进行关联（如食堂交易表会使用到学生表的id）。<strong>外键只是学习用，实际开发中，对于并发的项目的处理禁止使用外键。</strong></p>
<p><strong>添加外键</strong></p>
<p>①在创建表时</p>
<pre class=" language-mysql"><code class="language-mysql">stuId int(4),     #定义的数据类型要和主表中的一致
foreign key (stuId) references student (id),
设置一个外键   是谁       它从哪张表来   从student表中的id字段</code></pre>
<p>②后期添加</p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher add foreign key (stuId) references student (id);</code></pre>
<p>③删除外键</p>
<pre class=" language-mysql"><code class="language-mysql">alter table teacher drop foreign key teacher_ibfk_1;
#teacher_ibfk_1是这个外键的别名，删除外键不能通过字段来直接删除，要删除外键的别名
#查看外键别名
show create table teacher;</code></pre>
<p><strong>针对外键的操作</strong></p>
<p>置空操作：主表中id=5的人的数据被删除后，从表中对应的外键值会被设置为null。</p>
<p>级联操作：主表中id=5的人的数据被更新后（如id变为9），从表中对应的外键值会相应的变化。</p>
<p>置空操作一般是留给外界删除数据用的，级联操作一般是留给外界更新数据的。</p>
<pre class=" language-mysql"><code class="language-mysql">#在创建表，添加外键时
foreign key (stuId) references student (id) on delete set null on update cascade
# on delete set null 为置空操作
# on update cascade  为级联操作</code></pre>
<h2 id="数据库设计思维"><a href="#数据库设计思维" class="headerlink" title="数据库设计思维"></a>数据库设计思维</h2><p>关系？  关系型数据库  两张表的公有字段去确定数据的完整性</p>
<p>行？  一条数据  一条数据记录  实体</p>
<p>列？  一个字段   属性</p>
<p>注意<strong>避免字段冗余</strong>，例如：总分这个字段，大学期末成绩考试的成绩不重视于总分，因此不需要这个字段；对于高考成绩来说，虽说总分可以由其余分数之和可得，但还是需要这个字段，原因在于高考查询人数很多，对于总分的权重更高。</p>
<p><strong>实体和实体之间的关系</strong>：1、一对一（一个家教指导一个学生）2、一对多（一个学生对于食堂的多条消费）3、多对一（多个程序员干一个项目）4、多对多（多个程序员完成多个项目）</p>
<p>遵循Codd六种范式，<strong>尽可能遵守</strong>，事实情况下，能用三个就不错了。</p>
<p>第一范式，确保每列字段的原子性（及<strong>保证每列字段不可再分</strong>）。拆分主要看：需要统计就要拆分，不需要统计时就不拆分。例：地区人口普查，按什么什么省，什么什么市来拆分，及省和市这有两个字段；而填写家庭地址时，就一个address字段，不需要拆分成省和市。</p>
<p>第二范式，非键字段必须依赖于键字段（及<strong>在该表中的字段要符合</strong>，如不能够在学生表中加一个总财产的字段，这显然不合理）。</p>
<p>第三范式，消除传递依赖（及<strong>多余的字段要考虑去掉</strong>）。</p>
<h2 id="单表查询"><a href="#单表查询" class="headerlink" title="单表查询"></a>单表查询</h2><pre class=" language-mysql"><code class="language-mysql">select 
# select 可以做计算
select 2*7;
select '你好' as '世界';
# as 取别名   '世界'作为字段名

from
# from ?? 来自哪张表
select * from t1,t2;      
# 查询所有数据从t1和t2表中，这个会出现笛卡尔积的现象

dual
# 默认伪表
select 2*7;
本质上是 select 2*7 from dual;

where
# 条件筛选用的。有< <= = >= > and or not

in
select * from t4 where address in('beijing','shanghai');
等价于
select * from t4 where address='beijing' or address='shanghai';
# in前可以加一个not，表示不包含这些数据的。

between  and
# 在...之间
select * from t4 where age between 15 and 20;
# 这个区间为[15,20]
# between 前可以加not，表示取反

is null
# 是不是为空
select * from t4 where age is null;
# null 前可加 not,表示非空

聚合函数（作统计用）
# 求一张成绩表中所有语文成绩的和
select sum(chinese) from score;
# chinese 为score表中字段
# 求平均值
select avg(chinese) from score;
# 求该列最大最小值
max() / min()
# 统计次数
count()

like 模糊查询
select * from student where name like '张%';
# 查性张的所有人，%表示一个或多个字符
select * from student where name like '张_';
# _(下划线)表示一个字符

order by 排序查询
select * from score order by math asc;
# 从score表中查所有数据通过math升序排
# asc 升序  desc  降序

group by 分组查询
# 求一个表中男性的平均年龄和女性的平均年龄
select avg(age) as '年龄' , gender as '性别' from student group by gender;
# 记住，要使用group by, 查询的字段必须是分组字段和聚合函数

group_concat
# 使数据聚合显示
select group_concat(name),gender from student group by gender;

having
# 用于查询后的表（如分组查询后构成的虚拟表）的条件筛选
# 而 where是用作原来的表（及查询前有的表）作条件筛选
select avg(age) as 'age', address as 'address' from student group by address having age>24;

distinct / all
# distinct 去重
select distinct address from student;
select address from student; 本质上是 select all address from student;</code></pre>
<h2 id="多表查询"><a href="#多表查询" class="headerlink" title="多表查询"></a>多表查询</h2><pre class=" language-mysql"><code class="language-mysql">union 联合查询
select name,age from student union (这里本质上有 all,可换为 distinct) select name,age from teacher;

inner join
# 内连接,一定要有公共字段
select name,score from student inner join score on student.id=score.stuId;
# 一张学生表，一张学生的成绩表，两者有个公共字段
# student inner join score ,将student表和score表进行内连接
# on student.id=score.stuId,通过两张表中的公共字段作为连接依据

left join
# 左连接，以左表为基准（基准含义为:当基准表中有的而非基准表中没有的会将基准表中的显示出来）
right join
# 右连接，以右表为基准

cross join
# 交叉连接
select * from t1 cross join t3;
# 会返回一个笛卡尔积

natural join
# 自然内连接，会以同名字段作为两张表的连接依据
natural left join / natural right join    自然左/右连接
# 当无同名字段时，会返回笛卡尔积
# 当自然连接时有两个或两个以上的同名字段，会返回空表回来
# 当自然连接时有两个或两个以上的同名字段，会返回空表回来

using
# 用来指定连接的字段（当两张表有同名字段时）
select * from t1 inner join t3 using(id);
# 实际上不常用自然连接和using，一般用inner join 进行内连接并写全代码</code></pre>
<h2 id="子查询"><a href="#子查询" class="headerlink" title="子查询"></a>子查询</h2><pre class=" language-mysql"><code class="language-mysql">基本语法
# 查询分数表中分数大于85分的学生在学生表中的所有信息
select * from student where id in(select stuId from score where score>=85);
# not in 取反  in 可理解为相同，等于
exists/not exists  存在/不存在
select * from student where exists(select stuId from score where score>=85);
# 如果有人分数>=85就查询全班所有人的信息</code></pre>

  </article>

  
      
    <div class="nexmoe-post-copyright">
        <strong>本文作者：</strong>塔纳托斯<br>
        <strong>本文链接：</strong><a href="http://hai-chao.gitee.io/blog/2021/03/08/9.mysql-zi-xue-bi-ji/" title="http:&#x2F;&#x2F;hai-chao.gitee.io&#x2F;blog&#x2F;2021&#x2F;03&#x2F;08&#x2F;9.mysql-zi-xue-bi-ji&#x2F;" target="_blank" rel="noopener">http:&#x2F;&#x2F;hai-chao.gitee.io&#x2F;blog&#x2F;2021&#x2F;03&#x2F;08&#x2F;9.mysql-zi-xue-bi-ji&#x2F;</a><br>
        
            <strong>版权声明：</strong>本文采用 <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/cn/deed.zh" target="_blank">CC BY-NC-SA 3.0 CN</a> 协议进行许可
        
    </div>


  
  
  <div class="nexmoe-post-meta nexmoe-rainbow">
    
    
        <a class="nexmoefont icon-tag-fill -none-link" href="/blog/tags/%E5%AD%A6%E4%B9%A0/" rel="tag">学习</a>
    
</div>

  
      <div class="nexmoe-post-footer">
          
      </div>
  
</div>
            <div class="nexmoe-post-right">
              <div class="nexmoe-fixed">
                  <div class="nexmoe-tool"> 
                    
                      
                        
                          
                          
                              <button class="mdui-fab catalog" style="overflow:unset;">
                                  <i class="nexmoefont icon-i-catalog"></i>
                                  <div class="nexmoe-toc">
                                      <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C"><span class="toc-number">1.</span> <span class="toc-text">数据库的基本操作</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%A1%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C"><span class="toc-number">2.</span> <span class="toc-text">表的基本操作</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C"><span class="toc-number">3.</span> <span class="toc-text">数据操作</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="toc-number">4.</span> <span class="toc-text">数据类型</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%88%97%E5%B1%9E%E6%80%A7%E5%AE%8C%E6%95%B4%E6%80%A7"><span class="toc-number">5.</span> <span class="toc-text">列属性完整性</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1%E6%80%9D%E7%BB%B4"><span class="toc-number">6.</span> <span class="toc-text">数据库设计思维</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2"><span class="toc-number">7.</span> <span class="toc-text">单表查询</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2"><span class="toc-number">8.</span> <span class="toc-text">多表查询</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AD%90%E6%9F%A5%E8%AF%A2"><span class="toc-number">9.</span> <span class="toc-text">子查询</span></a></li></ol>
                                  </div>
                              </button>
                          
                          
                      
                    
                      <a href="#nexmoe-content" class="toc-link" aria-label="回到顶部" title="top"><button class="mdui-fab mdui-ripple"><i class="nexmoefont icon-caret-top"></i></button></a>
                  </div>
              </div>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/combine/npm/lazysizes@5.1.0/lazysizes.min.js,npm/mdui@0.4.3/dist/js/mdui.min.js?v=1"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

 

<script async src="/blog/js/app.js?v=1679297521159"></script>



<script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.8.1/dist/js/jquery.justifiedGallery.min.js"></script>
<script>
	$(".justified-gallery").justifiedGallery({
		rowHeight: 160,
		margins: 10,
	});
</script>


    





</body>

</html>
